# -*- coding: utf-8 -*-

import os

import pandas as pd


def main():
    path = '/Users/lidaoyu/Downloads/成绩信息.xls'  # 包含绩点信息的学分绩点统计
    directory = os.path.dirname(path)  # 文件所在文件夹路径
    filename = os.path.basename(path).replace(".xls", "")  # 文件名
    data = pd.read_excel(path)  # 原始信息

    # 计算每个专业的GPA排名
    data['profs_rank'] = data.groupby('专业名称')['平均学分绩点'].rank(ascending=False)
    data['profs_count'] = data.groupby('专业名称')['姓名'].transform('count')  # 假设学生姓名列用于计算总人数

    # 计算每个班级的GPA排名
    data['cls_rank'] = data.groupby('班级名称')['平均学分绩点'].rank(ascending=False)
    data['cls_count'] = data.groupby('班级名称')['姓名'].transform('count')  # 假设学生姓名列用于计算总人数

    # 创建新的一列，显示专业排名和总人数的格式
    data['专业排名'] = data['profs_rank'].astype(int).astype(str) + '/' + data['profs_count'].astype(int).astype(str)
    # 创建新的一列，显示班级排名和总人数的格式
    data['班级排名'] = data['cls_rank'].astype(int).astype(str) + '/' + data['cls_count'].astype(int).astype(str)

    # 删除“专业排名”列和“专业总人数”列
    data = data.drop(['profs_rank', 'profs_count'], axis=1)
    # 删除“班级排名”列和“班级总人数”列
    data = data.drop(['cls_rank', 'cls_count'], axis=1)

    # 重新排列列的顺序，将排名信息列移到第一列
    data = data[['专业排名'] + ['班级排名'] + [col for col in data.columns if col != '专业排名' and col != '班级排名']]

    # 指定要创建的文件夹名称
    folder_name = f'{directory}/{filename}专业排名&班级排名'
    # 检查文件夹是否已存在，如果不存在则创建
    if not os.path.exists(folder_name):
        os.makedirs(folder_name)
        print(f"文件夹 '{folder_name}' 创建成功!")
    else:
        print(f"文件夹 '{folder_name}' 已存在!")

    # 保存Excel文件
    data.to_excel(f'{folder_name}/专业排名信息.xlsx', index=False)  # 结果导出到Excel

    # 使用groupby()函数根据专业拆分数据，并保存为多个Excel文件
    grouped = data.groupby('专业名称')
    for group_name, group_data in grouped:
        output_file_path = f'{folder_name}/{group_name}.xlsx'  # 输出路径
        group_data.to_excel(output_file_path, index=False)
        print(f"保存 [{group_name}] 专业数据到 '{output_file_path}' !")

    print("文件已生成!")


if __name__ == '__main__':
    main()
